PHP opdrachtregel-scripts
Met de PHP-opdrachtregelinterface (PHO Command-Line Interface of PHP CLI) kan je PHP-programma's (scripts) aanroepen vanaf de Linux- of Windows-terminal, en ze ook plannen met behulp van cron.
PHP opdrachtregelinterface (PHP CLI)
Gewoonlijk dienen command-line PHP-scripts om programmeerfunctionaliteit aan je website toe te voegen die gericht is op het uitvoeren van taken die meer bronnen vereisen (geheugen, CPU). Of waar het om prestatieredenen gewenst is om de uitvoering naar de achtergrond te verplaatsen.
Opdrachtregel PHP-scripts kunnen ook nuttig zijn om willekeurige websitebeheertaken efficiënter en sneller uit te voeren.
Enkele voorbeelden:
- Een PHP-script om een nieuwsbrief naar alle website-abonnees te sturen (bijvoorbeeld met veel geheugen of CPU-vereisten)
- Een PHP-scriptscript om transactionele e-mails te verzenden (voorbeeld van het offloaden van de uitvoering "naar de achtergrond")
- Een PHP-script om nieuw geüploade afbeeldingen te comprimeren of te optimaliseren (zware CPU-taak)
Die scripts zijn niet toegankelijk voor het web. Om ervoor te zorgen dat kwaadwillende gebruikers ze niet kunnen aanroepen.
Voer een PHP-script uit via CLI
Om een PHP-script uit te voeren via de opdrachtregelinterface, roep je het PHP-interpreterprogramma aan en geef je het pad naar het PHP-script als eerste argument door:
php cli-voorbeeld.php
Zorg ervoor dat je de path
omgevingsvariabele naar php.exe
hebt ingesteld.
Je kan op Linux het PHP-script ook direct uitvoerbaar maken door de juiste shebang aan het begin van het script te plaatsen en het uitvoerbaar te maken. Voeg bovenaan je PHP-script shebang toe:
#!/usr/bin/env php
En maak het PHP-script uitvoerbaar:
chmod +x /pad/naar/cli-voorbeeld.php
Nu kan je het script uitvoeren door de bestandsnaam op te geven:
/pad/naar/cli-voorbeeld.php
Voer een PHP-script uit via cron
Met de Linux cron-service kan je op regelmatige basis bepaalde taken laten uitvoeren.
Wanneer je PHP-scripts uitvoert via cron, gebeurt dat via de PHP-opdrachtregelinterface. Het PHP-script wordt dan volgens een specifiek schema uitgevoerd door het besturingssysteem.
Om een PHP-script voor uitvoering te plannen, start je crontab -e
gevolgd door de naam van de taak, waarbij je een planning opgeeft voor het uitvoeren ervan:
* * * * * /usr/bin/php -d memory_limit=-1 /path/to/cli-voorbeeld.php
Het bovenstaande zal elke minuut /path/to/cli-voorbeeld.php
uitvoeren.
Je kan in plaats daarvan het schema aanpassen om het elke 10 minuten uit te laten voeren:
*/10 * * * * /usr/bin/php -d memory_limit=-1 /path/to/cli-voorbeeld.php
Parameters
Bij het aanroepen van een PHP-script vanaf de opdrachtregel kun je $argc
gebruiken om te zien hoeveel parameters worden doorgegeven en $argv
om toegang tot de parameters te krijgen. Schrijf de volgende code in een bestand met de naam cli-voorbeeld.php:
<?php var_dump($argc); //number of arguments passed var_dump($argv); //the arguments passed ?>
En voer het script uit via de CLI:
php cli-voorbeeld.php
Je krijgt de volgende output in de terminal:
PS C:\Apps\BookScraper> php cli-voorbeeld.php int(1) array(1) { [0]=> string(17) "cli-voorbeeld.php" }
De eerste parameter is altijd de naam van het script-bestand.
Voer nu het script uit via de CLI met enkele argumenten, bijvoorbeeld:
php cli-voorbeeld.php kerstmis 2021
Dan krijg je de volgende output:
PS C:\Apps\BookScraper> php cli-voorbeeld.php kerstmis 2021 int(3) array(3) { [0]=> string(17) "cli-voorbeeld.php" [1]=> string(8) "kerstmis" [2]=> string(4) "2021" }
Opties toevoegen
Als je variabelenamen wilt toewijzen aan de argumenten die worden doorgegeven, gebruik dan de functie getopt()
om dit te doen. Voeg de volgende code toe in cli-voorbeeld.php:
<?php var_dump($argc); //number of arguments passed var_dump($argv); //the arguments passed $val = getopt("p:q:"); var_dump($val); if ($val !== false) { echo var_export($val, true); } else { echo "Could not get value of command line option\n"; }
Voer nu het script uit via de CLI met enkele opties, bijvoorbeeld:
php cli-voorbeeld.php -pkerstmis -p2021
Dan krijg je dit als output:
PS C:\Apps\BookScraper> php cli-voorbeeld.php -pkerstmis -p2021 int(3) array(3) { [0]=> string(17) "cli-voorbeeld.php" [1]=> string(10) "-pkerstmis" [2]=> string(6) "-p2021" string(8) "kerstmis" [1]=> string(4) "2021" } } array ( 'p' => array ( 0 => 'kerstmis', 1 => '2021', ), )
Voer nu het script uit via de CLI met verschillende opties, bijvoorbeeld:
php cli-voorbeeld.php -mkerstmis -p2021 -qnieuwjaar -o2022
Je krijgt dit als output:
PS C:\Apps\BookScraper> php cli-voorbeeld.php -mkerstmis -p2021 -qnieuwjaar -t2022 int(5) array(5) { [0]=> string(17) "cli-voorbeeld.php" [1]=> string(10) "-mkerstmis" [2]=> string(6) "-p2021" [3]=> string(11) "-qnieuwjaar" [4]=> string(6) "-t2022" } array(2) { ["p"]=> string(4) "2021" ["q"]=> string(9) "nieuwjaar" } array ( 'p' => '2021', 'q' => 'nieuwjaar', )
Let erop dat je de optie -t en -m niet krijgt. Daarvoor moet je de code in cli-voorbeeld.php aanpassen:
<?php
var_dump($argc); //number of arguments passed
var_dump($argv); //the arguments passed
$val = getopt("p:q:t:m:");
var_dump($val);
if ($val !== false) {
echo var_export($val, true);
}
else {
echo "Could not get value of command line option\n";
}
Met dit als resultaat:
PS C:\Apps\BookScraper> php cli-voorbeeld.php -mkerstmis -p2021 -qnieuwjaar -t2022clear int(5) array(5) { [0]=> string(17) "cli-voorbeeld.php" [1]=> string(10) "-mkerstmis" [2]=> string(6) "-p2021" [3]=> string(11) "-qnieuwjaar" [4]=> string(11) "-t2022clear" } array(4) { ["m"]=> string(8) "kerstmis" ["p"]=> string(4) "2021" ["q"]=> string(9) "nieuwjaar" ["t"]=> string(9) "2022clear" } array ( 'm' => 'kerstmis', 'p' => '2021', 'q' => 'nieuwjaar', 't' => '2022clear', )